Many computer operating systems use what is called heap memory to store data used by software applications during their execution. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and free it for reuse when no longer needed. The task of fulfilling an allocation request consists of locating a block of unused memory of sufficient size. Memory requests are satisfied by allocating portions from a large pool of memory called the heap (e.g., heap memory) or free store. At any given time, some parts of the heap memory are in use, while some are “free” (unused) and thus available for future allocations.